
import Logika.Acc;
import Logika.Automat;
import acc.*;
import Logika.Ekran;
import Logika.Kodowanie;
import bluetooth.Client;
import bluetooth.ClientListener;
import bluetooth.BtVector;
import java.io.IOException;
import javax.bluetooth.RemoteDevice;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;

/**
 * @author pmp
 */

//aktualnie kasy maja zakodowane przeyslanie kodow nacisnietych klawiszy dla zaprezentowania mozliwosci
public class ClientTest extends MIDlet implements ClientListener , Acc{

    public static final boolean DEBUG = true;
    public  boolean ACC = false;
    private Form form;
    private Client client;
    private Display display;
    private String s;
    private Ekran ekran;
    //private Automat automat;
    private int now = 0;
    String cos = "";
    private boolean status = true;
    private Kodowanie kod = new Kodowanie();
    XYZConnect connector = null;
    String temp = "";
    String BT_ADRESS = "001167B99022";//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    public void startApp() {

        form = new Form("Test_BtTank");
        display = Display.getDisplay(this);
        client = new Client();
        client.createClient(this);
        display.setCurrent(form);
        ekran = new Ekran(client, this);
        if (DEBUG) {
            try {
                client.debugConnetion((StreamConnection) Connector.open("btspp://"+BT_ADRESS+":1;authenticate=false;encrypt=false;master=false"));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            connetionEstablished();
        } else {

            client.startDeviceInquiry();
        }

    //automat=new Automat(client);// Tutaj startuje automat
    // automat.connect();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void connectionLost(String deviceAdress) {
//        /ekran.gameOverBool=true;
        //now=9999999;
        // Wyswietlic komunikat GAME OVER
        // Czy chcesz zagrac jeszcze raz ??
        // Rozlaczyc
        //ekran.repaint();
        //utracenie polaczenia z serverem
    }

    public synchronized void statusUpdate(String message) {
        form.append(message);
    //wykorzystywana tylko podczas nawiazywania polaczenia
    }

    public void deviceListShown(final BtVector deviceList) {
        final List devices = new List("Select a device", List.IMPLICIT);
        display.setCurrent(devices);
        for (int i = 0; i < deviceList.size(); i++) {
            devices.append(getDeviceInfo((RemoteDevice) deviceList.get(i)), null);
        }
        devices.setCommandListener(
                new CommandListener() {

                    public void commandAction(Command arg0, Displayable arg1) {
                        form.deleteAll();
                        display.setCurrent(form);
                        client.startServiceSearch((RemoteDevice) deviceList.get(devices.getSelectedIndex()));
                    }
                });
    //wywalana gdy zakonczy sie wyszukiwanie urzadzen
    //do tego miejsca moze zostac bez zmian
    }

    public void dataReceived(String data, String btAdress) {

        System.out.println("Teraz wywolana zostala metoda otrzymane \n" + data);
        ekran.dekodowanie(data);
        ekran.repaint();
        //automat.dekodowanie(data);
        //automat.repaint();
        if (status) {
            //    automat.start();
            status = false;
        }
    //otrzymujemy dane np plansza
    //nalepiej bedzie aby tablice zakodowac alfabetem
    //kazdy nastepny znak lancucha to kolejne pole w tablicy
    //latwe do zakodowania i odkodowania
    }

    public void startAcc(){
        if(!ACC){
            connector = new XYZConnect(new Callback() {
                public void callback(int x, int y, int z) {
                    ekran.update(x, y, z);
                }
            });
            connector.start();
            ACC=true;}
    }

    public void connetionEstablished() {
        display.setCurrent(ekran);


    //display.setCurrent(automat);
    // automat.start();
    //wywowalna gdy skonczy szukac uslugi
    //tutraj moze np zostac zmieniona flaga blokujaca wysylanie
    }

    private String getDeviceInfo(RemoteDevice btDevice) {
        s = "<bez_nazwy>";
        try {
            s = btDevice.getFriendlyName(false) + " - 0x" + btDevice.getBluetoothAddress();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return s;
    }
}

